package com.ecube.protocol.exchange.charger.v3;

import com.ecube.protocol.common.ProtocolFunction;
import com.ecube.protocol.enums.ExchangeFunctionEnum;
import lombok.Data;

import java.util.List;

/**
 * 充电机
 * 充放电实时状态
 * 报文类型：state，
 * 报文方向：S2M，
 * 功能标识：chargeState，
 * 上送周期：10秒（充电时）
 *
 * @author zhuweijun
 * @version 1.0.0
 * @since 2025/7/29 12:39
 */
@Data
@ProtocolFunction(type = ExchangeFunctionEnum.class, value = "CHARGE_STATE")
public class ChgChargeState {

    /**
     * 充电机编号
     */
    private String chgID;
    /**
     * 仓位序号
     */
    private Integer cabinetNo;
    /**
     * 充电接口数量
     */
    private Integer gunNum = 2;
    /**
     * 充电接口实时测量数据
     */
    private List<GunMeasurement> gunList;
    /**
     * 充电模块数量
     */
    private Integer moduleNum = 2;
    /**
     * 充电模块实时测量数据
     */
    private List<ModuleMeasurement> moduleList;

    /**
     * 充电接口实时测量数据
     */
    @Data
    public static class GunMeasurement {
        /**
         *  枪编号
         */
        private Integer gunNo;
        /**
         * 开始充电时间
         */
        private String startTime;
        /**
         * 充放电时长
         */
        private Integer chgTime;
        /**
         * 剩余充放电时长
         */
        private Integer remainderChgTime = 6600;
        /**
         * 充电机输出电压
         */
        private Float chgOutputVolt = 250.0F;
        /**
         * 充电机输出电流
         */
        private Float chgOutputCurr = 120.0F;
        /**
         * 充放电电量
         */
        private Float chgQty = 120.0F;
        /**
         * 电池箱ID
         */
        private String batID = "12502210214";
        /**
         * 电池SOC
         */
        private Float soc = 35F;
        /**
         * 电压需求
         */
        private Float voltDemand = 220.0F;
        /**
         * 电流需求
         */
        private Float currDemand = 1.0F;

        /**
         * 充放电模式 1-恒压充电；2-恒流充电；3-恒功率充电
         */
        private Integer chgMode = 1;

        /**
         * 直流电表电量
         */
        private Float dcMeterElect = 2000.0F;
        /**
         * 插座温度
         */
        private String plugTemp = "32";

        /**
         * 充放电流水号
         */
        private String orderSn;
        /**
         * 运行状态：1-充电，2-放电
         */
        private Integer state;
    }

    /**
     * 充电模块实时测量数据
     */
    @Data
    public static class ModuleMeasurement {
        /**
         * 模块编号，从1开始
         */
        private Integer moduleNo;

        /**
         * 枪编号
         */
        private Integer gunNo;

        /**
         * 电压
         */
        private Float volt = 220.0F;

        /**
         * 电流
         */
        private Float curr = 1.0F;

        /**
         * 温度
         */
        private Integer temp = 28;
    }
}
